<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    // 题目1: 对字符串进行排列组合, 得到所有字符的全排列组合(假设所有字符不重复)
    // 函数名：permutation
    // 参数：需要排列组合的字符串
    // 返回值：字符串的所有排列组合数组
    // 例如：permutation("abc") 返回 ["abc", "acb", "bac", "bca", "cab", "cba"]

    function permutation(str) {
        if (!str.length) return [''];
        const res = [];
        // path是组合的字符串
        const search = path => {
            if (path.length === str.length) {
                // 长度满足条件，推入res数组
                res.push(path);
                return;
            }
            for (const index of str) {
                // 将路径中没出现过的字母，拼接到路劲，再次组合
                if (path.indexOf(index) === -1) {
                    search(`${path}${index}`);
                }
            }
        };
        // 从空字符串开始
        search('');
        return res;
    };

    console.log(permutation("abc"));




    // ---------------------------------------------------------------------------------

    // 题目2: 将一个字符串里的大小写字符反转一下（小写的转大写，大写的转小写）
    // 函数名：strConvert
    // 参数：源字符串
    // 返回值：大小写反转后的字符串
    // 例如：strConvert("HelloWorld") 返回 "hELLOwORLD"

    function strConvert(str) {//此处写代码
        let str1 = "";
        for (let i = 0; i < str.length; i++) {
            // 遍历数组当他等于大写字母时把他转换为小写字母
            if (str.charCodeAt(i) >= '65' && str.charCodeAt(i) <= '90') {
                var x = str.charAt(i).toLowerCase();
            }//判断字母当他位小写字母时把他转换为大写字母
            else if (str.charCodeAt(i) >= '97' && str.charCodeAt(i) <= '122') {
                var x = str.charAt(i).toUpperCase();
            }
            str1 = str1 + x;

        }
        return str1;
    }
    console.log(strConvert("HelloWorld"));


    // ---------------------------------------------------------------------------------

    // 题目3: 实现数组的去重, 传入需要去重的纯数字数组,将数组去重,返回数组元素不重复的数组
    // 函数名：noRepeatArray
    // 参数：需要去重的纯数字数组
    // 返回值：去重后的数组
    // 例如：noRepeatArray([3,3,1,5,1,2]) 返回 [3, 1, 5, 2]

    // 利用数组的indexof()来去重
    function noRepeatArray(arr) {
        let arr1 = [];
        for (let i = 0; i < arr.length; i++) {
            if (arr1.indexOf(arr[i]) == -1) {
                arr1.push(arr[i]);
            }
        }
        return arr1;
    }

    console.log(noRepeatArray([1, 1, 1, 2, 34, 5, 6, 5, 6, 3, 2, 8, 9]))

    set方法
    function noRepeatArray(arr) {
        let set = new Set(arr);
        // 将set转换为数组
        arr = Array.from(set);
        return arr;
    }

    console.log((noRepeatArray([1, 2, 3, 4, 1, 2, 3, 5, 6, 7])));

    // --------------------------------------------------------------------------------------
    // 题目4: 写一个函数 parseQueryString，它的用途是把 URL 参数解析为一个对象
    // 函数名：parseQueryString
    // 参数：URL字符串
    // 返回值：URL字符串解析后的对象
    // 例如：parseQueryString("admin=user&pass=1234") 返回 { admin: "user", pass: "1234" }

    function parseQueryString(UrlStr) {
        let obj = {};
        //把字符转为数组以（‘&’）；
        let para = UrlStr.split('&');
        for (let i = 0; i < para.length; i++) {
            let arr = para[i].split('=');
            obj[arr[0]] = arr[1];
        }
        return obj;

    }

    console.log(parseQueryString("admin=user&pass=1234"));


</script>